home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / idlelib / AutoExpand.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2005-10-18  |  2KB  |  91 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.4)
  3.  
  4. import string
  5. import re
  6.  
  7. class AutoExpand:
  8.     menudefs = [
  9.         ('edit', [
  10.             ('E_xpand Word', '<<expand-word>>')])]
  11.     wordchars = string.ascii_letters + string.digits + '_'
  12.     
  13.     def __init__(self, editwin):
  14.         self.text = editwin.text
  15.         self.state = None
  16.  
  17.     
  18.     def expand_word_event(self, event):
  19.         curinsert = self.text.index('insert')
  20.         curline = self.text.get('insert linestart', 'insert lineend')
  21.         if not self.state:
  22.             words = self.getwords()
  23.             index = 0
  24.         else:
  25.             (words, index, insert, line) = self.state
  26.             if insert != curinsert or line != curline:
  27.                 words = self.getwords()
  28.                 index = 0
  29.             
  30.         if not words:
  31.             self.text.bell()
  32.             return 'break'
  33.         
  34.         word = self.getprevword()
  35.         self.text.delete('insert - %d chars' % len(word), 'insert')
  36.         newword = words[index]
  37.         index = (index + 1) % len(words)
  38.         if index == 0:
  39.             self.text.bell()
  40.         
  41.         self.text.insert('insert', newword)
  42.         curinsert = self.text.index('insert')
  43.         curline = self.text.get('insert linestart', 'insert lineend')
  44.         self.state = (words, index, curinsert, curline)
  45.         return 'break'
  46.  
  47.     
  48.     def getwords(self):
  49.         word = self.getprevword()
  50.         if not word:
  51.             return []
  52.         
  53.         before = self.text.get('1.0', 'insert wordstart')
  54.         wbefore = re.findall('\\b' + word + '\\w+\\b', before)
  55.         del before
  56.         after = self.text.get('insert wordend', 'end')
  57.         wafter = re.findall('\\b' + word + '\\w+\\b', after)
  58.         del after
  59.         if not wbefore and not wafter:
  60.             return []
  61.         
  62.         words = []
  63.         dict = { }
  64.         wbefore.reverse()
  65.         for w in wbefore:
  66.             if dict.get(w):
  67.                 continue
  68.             
  69.             words.append(w)
  70.             dict[w] = w
  71.         
  72.         for w in wafter:
  73.             if dict.get(w):
  74.                 continue
  75.             
  76.             words.append(w)
  77.             dict[w] = w
  78.         
  79.         words.append(word)
  80.         return words
  81.  
  82.     
  83.     def getprevword(self):
  84.         line = self.text.get('insert linestart', 'insert')
  85.         i = len(line)
  86.         while i > 0 and line[i - 1] in self.wordchars:
  87.             i = i - 1
  88.         return line[i:]
  89.  
  90.  
  91.